home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / e / amigae30a_fr.lha / AmigaE30f / Sources / Pd / MakeKickFile.e < prev    next >
Encoding:
Text File  |  1993-11-09  |  3.7 KB  |  110 lines

  1. ;/* MakeKickFile.e - Executez moi pour compilation avec Amiga E v2.1
  2. ec MakeKickFile
  3. quit
  4. */
  5. /*
  6. **      $Filename: MakeKickFile.e $
  7. **      $Release: 1.1 $
  8. **
  9. **      (C) Droits de copie 1991-1993 Jaba Development.
  10. **          Écrit par Jan van den Baard
  11. **
  12. **      Crée un fichier rom-kick de la machine où il tourne.
  13. **      Il peut créer des fichier de ROM 256K et 512K.
  14. **
  15. **      C'est la traduction littérale de mon propre original en code C
  16. **      et la première chose que j'écris en miga E. Toute fois, il ne
  17. **      doit pas utiliser l'E a fond toutes ses possibilités.
  18. **      Pardonnez moi s'il vous plait.
  19. **
  20. **      L'utilisation est simple. Vous passez à ce programme un nom de
  21. **      fichier et, si la ROM est connue, il écrira la ROM de la machine
  22. **      dans le fichier. Il écrit la ROM, *PAS* la soft-kicked* ROM.
  23. **
  24. **      Le fichier puet ensuite être utilisé par SETCPU ou SKICK pour
  25. **      booter une machine avec le fichier ROM.
  26. **
  27. **      Je l'ai testé avec succès avec une ROM de l'A1200 sur un A2500.
  28. **
  29. **      Aucun test n'a été fait avec un fichier ROM 1.2/1.3
  30. **      Je n'ai pas accès à des machines 1.2/1.3.
  31. **
  32. **      C'est vraiment un hack...mais un hack qui marche !
  33. **
  34. ** Traduction : Olivier ANH (BUGSS)
  35. **/
  36.  
  37. MODULE  'dos/dos'
  38.  
  39. /* constantes de taille de la ROM et les cookies magiques */
  40. CONST   SMALLROM = $00040000, SMALLMAGIC = $11114EF9,
  41.         BIGROM   = $00080000, BIGMAGIC   = $11144EF9
  42.  
  43. /* structure RomFileHeader de C= */
  44. OBJECT  romfileheader
  45.     alwaysnil :  LONG       /* sans commentaire -: toujours NIL */
  46.     romsize   :  LONG       /* la taille de la ROM */
  47. ENDOBJECT
  48.  
  49. /* seulement 3 erreurs d'exception... */
  50. ENUM    ER_USAGE=1, ER_UNKNOWN, ER_IO
  51.  
  52. /* Vas-y, Simone... */
  53. PROC main() HANDLE
  54.     DEF outfile = NIL,
  55.         base    = NIL : PTR TO LONG,
  56.         size    = NIL,
  57.         len     = NIL,
  58.         rk, rfh       : romfileheader
  59.  
  60.     WriteF( '\e[1mMakeKickFile version 1.1 - (C) 1991-1993 Jaba Development\e[0m\n' );
  61.  
  62.     /* pas d'argument ou "?", alors imprime l'utilisation */
  63.     IF StrCmp( arg, '', 1 ) OR StrCmp( arg, '?', 2 ) THEN Raise( ER_USAGE )
  64.  
  65.     /* d'abord essaye avec une ROM de 512 KB */
  66.     base := $00F80000
  67.  
  68.     /* si le cookie magique n'est pas un BIGMAGIC alors ça doit être une ROM de 256 KB */
  69.     IF ( base[ 0 ] <> BIGMAGIC ) THEN base := $00FC0000
  70.  
  71.     /* voyons voir avec quelle ROM on a affaire */
  72.     rk := base[ 0 ]
  73.  
  74.     SELECT rk
  75.         CASE    SMALLMAGIC; size := SMALLROM        /* 256 KB */
  76.         CASE    BIGMAGIC;   size := BIGROM          /* 512 KB */
  77.         DEFAULT;            Raise( ER_UNKNOWN )     /* inconnu... */
  78.     ENDSELECT
  79.  
  80.     /* montre la taille de la ROM */
  81.     WriteF( 'Taille de la ROM = \dKoctets.\n', size / 1024 )
  82.  
  83.     /* ouvre le fichier kick */
  84.     IF ( outfile := Open( arg, MODE_NEWFILE ))
  85.         WriteF( 'écrit le fichier image Kick...\n' )
  86.  
  87.         rfh.alwaysnil := NIL        /* met ça à NIL */
  88.         rfh.romsize   := size       /* met ici la taille de la ROM */
  89.  
  90.         len := Write( outfile, rfh, 8 ) /* écrit le romfileheader */
  91.         len := len + Write( outfile, base, size )   /* écrit la rom */
  92.  
  93.         Close( outfile ) /* close the kick-file */
  94.  
  95.         /* tout a été bien écrit ? */
  96.         IF ( ( len <> ( size + 8 )) OR IoErr() ) THEN Raise( ER_IO )
  97.     ELSE
  98.         /* ne peut pas ouvrir le fichier! */
  99.         WriteF( 'Impossible d'ouvrir le fichier de sortie !\n' )
  100.     ENDIF
  101. EXCEPT
  102.     /* procédure d'exception quand aucun argument n'est donné
  103.        ou la ROM n'est pas reconnue ou il y a une erreur d'entrée/sortie. */
  104.     SELECT exception
  105.         CASE    ER_USAGE;   WriteF( 'Usage: MakeKickFile <romfilename>\n' )
  106.         CASE    ER_UNKNOWN; WriteF( 'ROM inconue !\n' )
  107.         DEFAULT;            PrintFault( IoErr(), 'Erreur -' )
  108.     ENDSELECT
  109. ENDPROC IoErr()
  110.